package com.miage.itrading.client;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.miage.itrading.shared.Util;
import com.miage.itrading.shared.entites.Cotation;

@SuppressWarnings("deprecation")
public class HeaderWidget extends GenericWidget {

	private final GetListesServiceAsync	getListesService	= GWT
																	.create(GetListesService.class);

	private VerticalPanel				header;
	private HorizontalPanel				indices;

	public HeaderWidget(ItradingAffichage context, String uid) {
		super(context, uid);

	}

	@Override
	public void configureWidget() {

		final AsyncCallback<List<Cotation>> listeIndices = new AsyncCallback<List<Cotation>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());

			}

			public void onSuccess(List<Cotation> result) {

				indices.setSpacing(5);

				/**
				 * Affiche les indices
				 */
				for (final Cotation c : result) {
					System.out.println("Affiche indice " + c.getNom());

					Anchor indice = new Anchor(c.getNom() + " ("
							+ Util.variationCoursString(c) + ")");

					indice.addClickHandler(new ClickHandler() {

						public void onClick(ClickEvent event) {
							/**
							 * Récupère l'indice avec l'historique complet et l'affiche
							 */
							final AsyncCallback<Cotation> cotationAvecHistorique = new AsyncCallback<Cotation>() {

								public void onFailure(Throwable caught) {
									Window
											.alert("L'indice "
													+ c.getNom()
													+ " ne peut être affichée pour le moment.");
								}

								public void onSuccess(Cotation result) {
									context.afficheCoursIntraday(result);
								}

							};
							getListesService.getCotationById(c.getIdCotation(),
									cotationAvecHistorique);
						}
					});

					indices.add(indice);
				}
			}
		};
		getListesService.getIndices(listeIndices);
	}

	public Widget createWidget() {
		header = new VerticalPanel();
		indices = new HorizontalPanel();

		Label titre = new Label("iTrading");
		titre.setStylePrimaryName("body-titre");
		titre.setWordWrap(false);
		titre.setWidth("100%");

		header.setSize("100%", "100%");
		header.add(titre);
		header.add(indices);

		header.setCellHorizontalAlignment(titre,
				HasHorizontalAlignment.ALIGN_CENTER);

		return header;
	}

}
